/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package data.impl;

import data.DataLog;
import data.DataPackage;
import data.Exercise;
import data.Sport;

import java.sql.Timestamp;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;

import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.InternalEList;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Exercise</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link data.impl.ExerciseImpl#getSport <em>Sport</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTimestamp <em>Timestamp</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getName <em>Name</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getEnergyExpenditure <em>Energy Expenditure</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDatalogs <em>Datalogs</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getFusedDataLog <em>Fused Data Log</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTotalTime <em>Total Time</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTotalTimePace <em>Total Time Pace</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getMovingTime <em>Moving Time</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getMovingTimePace <em>Moving Time Pace</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDistance <em>Distance</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getMovingSpeedAverage <em>Moving Speed Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getMovingSpeedMaximum <em>Moving Speed Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getAscentSpeedAverage <em>Ascent Speed Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getAscentSpeedMaximum <em>Ascent Speed Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDescentSpeedAverage <em>Descent Speed Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDescentSpeedMaximum <em>Descent Speed Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getAscentGradeAverage <em>Ascent Grade Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getAscentGradeMaximum <em>Ascent Grade Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDescentGradeAverage <em>Descent Grade Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDescentGradeMaximum <em>Descent Grade Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getElevationGain <em>Elevation Gain</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getElevationLoss <em>Elevation Loss</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getElevationStart <em>Elevation Start</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getElevationFinish <em>Elevation Finish</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getElevationMaximum <em>Elevation Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getElevationMinimum <em>Elevation Minimum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getHeartrateAverage <em>Heartrate Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getHeartrateMaximum <em>Heartrate Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getHeartrateMinimum <em>Heartrate Minimum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTemperatureStart <em>Temperature Start</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTemperatureFinish <em>Temperature Finish</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTemperatureMaximum <em>Temperature Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTemperatureMinimum <em>Temperature Minimum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getTemperatureAverage <em>Temperature Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getRelativehumidityMinimum <em>Relativehumidity Minimum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getRelativehumidityAverage <em>Relativehumidity Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getWindspeedMinimum <em>Windspeed Minimum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getWindspeedMaximum <em>Windspeed Maximum</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getWindspeedAverage <em>Windspeed Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getWinddirectionAverage <em>Winddirection Average</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDistanceAscent <em>Distance Ascent</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getDistanceDescent <em>Distance Descent</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getPercentAscent <em>Percent Ascent</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getPercentDescent <em>Percent Descent</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getPercentFlat <em>Percent Flat</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getAnaerobicPercentage <em>Anaerobic Percentage</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getAerobicPercentage <em>Aerobic Percentage</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getOtherPercentage <em>Other Percentage</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getVo2maxPercentage <em>Vo2max Percentage</em>}</li>
 *   <li>{@link data.impl.ExerciseImpl#getRecoveryPercentage <em>Recovery Percentage</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class ExerciseImpl extends EObjectImpl implements Exercise {
	/**
	 * The default value of the '{@link #getSport() <em>Sport</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSport()
	 * @generated
	 * @ordered
	 */
	protected static final Sport SPORT_EDEFAULT = Sport.MOUNTAIN_BIKING;

	/**
	 * The cached value of the '{@link #getSport() <em>Sport</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSport()
	 * @generated
	 * @ordered
	 */
	protected Sport sport = SPORT_EDEFAULT;

	/**
	 * The default value of the '{@link #getTimestamp() <em>Timestamp</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTimestamp()
	 * @generated
	 * @ordered
	 */
	protected static final Date TIMESTAMP_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getTimestamp() <em>Timestamp</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTimestamp()
	 * @generated
	 * @ordered
	 */
	protected Date timestamp = TIMESTAMP_EDEFAULT;

	/**
	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getName()
	 * @generated
	 * @ordered
	 */
	protected static final String NAME_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getName()
	 * @generated
	 * @ordered
	 */
	protected String name = NAME_EDEFAULT;

	/**
	 * The default value of the '{@link #getEnergyExpenditure() <em>Energy Expenditure</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getEnergyExpenditure()
	 * @generated
	 * @ordered
	 */
	protected static final float ENERGY_EXPENDITURE_EDEFAULT = 0.0F;

	/**
	 * The cached value of the '{@link #getEnergyExpenditure() <em>Energy Expenditure</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getEnergyExpenditure()
	 * @generated
	 * @ordered
	 */
	protected float energyExpenditure = ENERGY_EXPENDITURE_EDEFAULT;

	/**
	 * The cached value of the '{@link #getDatalogs() <em>Datalogs</em>}' containment reference list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDatalogs()
	 * @generated
	 * @ordered
	 */
	protected EList<DataLog> datalogs;

	/**
	 * The cached value of the '{@link #getFusedDataLog() <em>Fused Data Log</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getFusedDataLog()
	 * @generated
	 * @ordered
	 */
	protected DataLog fusedDataLog;

	/**
	 * The default value of the '{@link #getTotalTime() <em>Total Time</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTotalTime()
	 * @generated
	 * @ordered
	 */
	protected static final long TOTAL_TIME_EDEFAULT = 0L;

	/**
	 * The cached value of the '{@link #getTotalTime() <em>Total Time</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTotalTime()
	 * @generated
	 * @ordered
	 */
	protected long totalTime = TOTAL_TIME_EDEFAULT;

	/**
	 * The default value of the '{@link #getTotalTimePace() <em>Total Time Pace</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTotalTimePace()
	 * @generated
	 * @ordered
	 */
	protected static final long TOTAL_TIME_PACE_EDEFAULT = 0L;

	/**
	 * The cached value of the '{@link #getTotalTimePace() <em>Total Time Pace</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTotalTimePace()
	 * @generated
	 * @ordered
	 */
	protected long totalTimePace = TOTAL_TIME_PACE_EDEFAULT;

	/**
	 * The default value of the '{@link #getMovingTime() <em>Moving Time</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingTime()
	 * @generated
	 * @ordered
	 */
	protected static final long MOVING_TIME_EDEFAULT = 0L;

	/**
	 * The cached value of the '{@link #getMovingTime() <em>Moving Time</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingTime()
	 * @generated
	 * @ordered
	 */
	protected long movingTime = MOVING_TIME_EDEFAULT;

	/**
	 * The default value of the '{@link #getMovingTimePace() <em>Moving Time Pace</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingTimePace()
	 * @generated
	 * @ordered
	 */
	protected static final long MOVING_TIME_PACE_EDEFAULT = 0L;

	/**
	 * The cached value of the '{@link #getMovingTimePace() <em>Moving Time Pace</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingTimePace()
	 * @generated
	 * @ordered
	 */
	protected long movingTimePace = MOVING_TIME_PACE_EDEFAULT;

	/**
	 * The default value of the '{@link #getDistance() <em>Distance</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDistance()
	 * @generated
	 * @ordered
	 */
	protected static final double DISTANCE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDistance() <em>Distance</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDistance()
	 * @generated
	 * @ordered
	 */
	protected double distance = DISTANCE_EDEFAULT;

	/**
	 * The default value of the '{@link #getMovingSpeedAverage() <em>Moving Speed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingSpeedAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double MOVING_SPEED_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getMovingSpeedAverage() <em>Moving Speed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingSpeedAverage()
	 * @generated
	 * @ordered
	 */
	protected double movingSpeedAverage = MOVING_SPEED_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getMovingSpeedMaximum() <em>Moving Speed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingSpeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double MOVING_SPEED_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getMovingSpeedMaximum() <em>Moving Speed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMovingSpeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected double movingSpeedMaximum = MOVING_SPEED_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getAscentSpeedAverage() <em>Ascent Speed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentSpeedAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double ASCENT_SPEED_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getAscentSpeedAverage() <em>Ascent Speed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentSpeedAverage()
	 * @generated
	 * @ordered
	 */
	protected double ascentSpeedAverage = ASCENT_SPEED_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getAscentSpeedMaximum() <em>Ascent Speed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentSpeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double ASCENT_SPEED_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getAscentSpeedMaximum() <em>Ascent Speed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentSpeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected double ascentSpeedMaximum = ASCENT_SPEED_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getDescentSpeedAverage() <em>Descent Speed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentSpeedAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double DESCENT_SPEED_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDescentSpeedAverage() <em>Descent Speed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentSpeedAverage()
	 * @generated
	 * @ordered
	 */
	protected double descentSpeedAverage = DESCENT_SPEED_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getDescentSpeedMaximum() <em>Descent Speed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentSpeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double DESCENT_SPEED_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDescentSpeedMaximum() <em>Descent Speed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentSpeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected double descentSpeedMaximum = DESCENT_SPEED_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getAscentGradeAverage() <em>Ascent Grade Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentGradeAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double ASCENT_GRADE_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getAscentGradeAverage() <em>Ascent Grade Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentGradeAverage()
	 * @generated
	 * @ordered
	 */
	protected double ascentGradeAverage = ASCENT_GRADE_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getAscentGradeMaximum() <em>Ascent Grade Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentGradeMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double ASCENT_GRADE_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getAscentGradeMaximum() <em>Ascent Grade Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAscentGradeMaximum()
	 * @generated
	 * @ordered
	 */
	protected double ascentGradeMaximum = ASCENT_GRADE_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getDescentGradeAverage() <em>Descent Grade Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentGradeAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double DESCENT_GRADE_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDescentGradeAverage() <em>Descent Grade Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentGradeAverage()
	 * @generated
	 * @ordered
	 */
	protected double descentGradeAverage = DESCENT_GRADE_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getDescentGradeMaximum() <em>Descent Grade Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentGradeMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double DESCENT_GRADE_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDescentGradeMaximum() <em>Descent Grade Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescentGradeMaximum()
	 * @generated
	 * @ordered
	 */
	protected double descentGradeMaximum = DESCENT_GRADE_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getElevationGain() <em>Elevation Gain</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationGain()
	 * @generated
	 * @ordered
	 */
	protected static final double ELEVATION_GAIN_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getElevationGain() <em>Elevation Gain</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationGain()
	 * @generated
	 * @ordered
	 */
	protected double elevationGain = ELEVATION_GAIN_EDEFAULT;

	/**
	 * The default value of the '{@link #getElevationLoss() <em>Elevation Loss</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationLoss()
	 * @generated
	 * @ordered
	 */
	protected static final double ELEVATION_LOSS_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getElevationLoss() <em>Elevation Loss</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationLoss()
	 * @generated
	 * @ordered
	 */
	protected double elevationLoss = ELEVATION_LOSS_EDEFAULT;

	/**
	 * The default value of the '{@link #getElevationStart() <em>Elevation Start</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationStart()
	 * @generated
	 * @ordered
	 */
	protected static final double ELEVATION_START_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getElevationStart() <em>Elevation Start</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationStart()
	 * @generated
	 * @ordered
	 */
	protected double elevationStart = ELEVATION_START_EDEFAULT;

	/**
	 * The default value of the '{@link #getElevationFinish() <em>Elevation Finish</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationFinish()
	 * @generated
	 * @ordered
	 */
	protected static final double ELEVATION_FINISH_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getElevationFinish() <em>Elevation Finish</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationFinish()
	 * @generated
	 * @ordered
	 */
	protected double elevationFinish = ELEVATION_FINISH_EDEFAULT;

	/**
	 * The default value of the '{@link #getElevationMaximum() <em>Elevation Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double ELEVATION_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getElevationMaximum() <em>Elevation Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationMaximum()
	 * @generated
	 * @ordered
	 */
	protected double elevationMaximum = ELEVATION_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getElevationMinimum() <em>Elevation Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationMinimum()
	 * @generated
	 * @ordered
	 */
	protected static final double ELEVATION_MINIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getElevationMinimum() <em>Elevation Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getElevationMinimum()
	 * @generated
	 * @ordered
	 */
	protected double elevationMinimum = ELEVATION_MINIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getHeartrateAverage() <em>Heartrate Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeartrateAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double HEARTRATE_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getHeartrateAverage() <em>Heartrate Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeartrateAverage()
	 * @generated
	 * @ordered
	 */
	protected double heartrateAverage = HEARTRATE_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getHeartrateMaximum() <em>Heartrate Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeartrateMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double HEARTRATE_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getHeartrateMaximum() <em>Heartrate Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeartrateMaximum()
	 * @generated
	 * @ordered
	 */
	protected double heartrateMaximum = HEARTRATE_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getHeartrateMinimum() <em>Heartrate Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeartrateMinimum()
	 * @generated
	 * @ordered
	 */
	protected static final double HEARTRATE_MINIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getHeartrateMinimum() <em>Heartrate Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeartrateMinimum()
	 * @generated
	 * @ordered
	 */
	protected double heartrateMinimum = HEARTRATE_MINIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getTemperatureStart() <em>Temperature Start</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureStart()
	 * @generated
	 * @ordered
	 */
	protected static final double TEMPERATURE_START_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getTemperatureStart() <em>Temperature Start</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureStart()
	 * @generated
	 * @ordered
	 */
	protected double temperatureStart = TEMPERATURE_START_EDEFAULT;

	/**
	 * The default value of the '{@link #getTemperatureFinish() <em>Temperature Finish</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureFinish()
	 * @generated
	 * @ordered
	 */
	protected static final double TEMPERATURE_FINISH_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getTemperatureFinish() <em>Temperature Finish</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureFinish()
	 * @generated
	 * @ordered
	 */
	protected double temperatureFinish = TEMPERATURE_FINISH_EDEFAULT;

	/**
	 * The default value of the '{@link #getTemperatureMaximum() <em>Temperature Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double TEMPERATURE_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getTemperatureMaximum() <em>Temperature Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureMaximum()
	 * @generated
	 * @ordered
	 */
	protected double temperatureMaximum = TEMPERATURE_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getTemperatureMinimum() <em>Temperature Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureMinimum()
	 * @generated
	 * @ordered
	 */
	protected static final double TEMPERATURE_MINIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getTemperatureMinimum() <em>Temperature Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureMinimum()
	 * @generated
	 * @ordered
	 */
	protected double temperatureMinimum = TEMPERATURE_MINIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getTemperatureAverage() <em>Temperature Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double TEMPERATURE_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getTemperatureAverage() <em>Temperature Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTemperatureAverage()
	 * @generated
	 * @ordered
	 */
	protected double temperatureAverage = TEMPERATURE_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getRelativehumidityMinimum() <em>Relativehumidity Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRelativehumidityMinimum()
	 * @generated
	 * @ordered
	 */
	protected static final double RELATIVEHUMIDITY_MINIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getRelativehumidityMinimum() <em>Relativehumidity Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRelativehumidityMinimum()
	 * @generated
	 * @ordered
	 */
	protected double relativehumidityMinimum = RELATIVEHUMIDITY_MINIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getRelativehumidityAverage() <em>Relativehumidity Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRelativehumidityAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double RELATIVEHUMIDITY_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getRelativehumidityAverage() <em>Relativehumidity Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRelativehumidityAverage()
	 * @generated
	 * @ordered
	 */
	protected double relativehumidityAverage = RELATIVEHUMIDITY_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getWindspeedMinimum() <em>Windspeed Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWindspeedMinimum()
	 * @generated
	 * @ordered
	 */
	protected static final double WINDSPEED_MINIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getWindspeedMinimum() <em>Windspeed Minimum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWindspeedMinimum()
	 * @generated
	 * @ordered
	 */
	protected double windspeedMinimum = WINDSPEED_MINIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getWindspeedMaximum() <em>Windspeed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWindspeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected static final double WINDSPEED_MAXIMUM_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getWindspeedMaximum() <em>Windspeed Maximum</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWindspeedMaximum()
	 * @generated
	 * @ordered
	 */
	protected double windspeedMaximum = WINDSPEED_MAXIMUM_EDEFAULT;

	/**
	 * The default value of the '{@link #getWindspeedAverage() <em>Windspeed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWindspeedAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double WINDSPEED_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getWindspeedAverage() <em>Windspeed Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWindspeedAverage()
	 * @generated
	 * @ordered
	 */
	protected double windspeedAverage = WINDSPEED_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getWinddirectionAverage() <em>Winddirection Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWinddirectionAverage()
	 * @generated
	 * @ordered
	 */
	protected static final double WINDDIRECTION_AVERAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getWinddirectionAverage() <em>Winddirection Average</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWinddirectionAverage()
	 * @generated
	 * @ordered
	 */
	protected double winddirectionAverage = WINDDIRECTION_AVERAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getDistanceAscent() <em>Distance Ascent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDistanceAscent()
	 * @generated
	 * @ordered
	 */
	protected static final double DISTANCE_ASCENT_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDistanceAscent() <em>Distance Ascent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDistanceAscent()
	 * @generated
	 * @ordered
	 */
	protected double distanceAscent = DISTANCE_ASCENT_EDEFAULT;

	/**
	 * The default value of the '{@link #getDistanceDescent() <em>Distance Descent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDistanceDescent()
	 * @generated
	 * @ordered
	 */
	protected static final double DISTANCE_DESCENT_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getDistanceDescent() <em>Distance Descent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDistanceDescent()
	 * @generated
	 * @ordered
	 */
	protected double distanceDescent = DISTANCE_DESCENT_EDEFAULT;

	/**
	 * The default value of the '{@link #getPercentAscent() <em>Percent Ascent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPercentAscent()
	 * @generated
	 * @ordered
	 */
	protected static final double PERCENT_ASCENT_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getPercentAscent() <em>Percent Ascent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPercentAscent()
	 * @generated
	 * @ordered
	 */
	protected double percentAscent = PERCENT_ASCENT_EDEFAULT;

	/**
	 * The default value of the '{@link #getPercentDescent() <em>Percent Descent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPercentDescent()
	 * @generated
	 * @ordered
	 */
	protected static final double PERCENT_DESCENT_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getPercentDescent() <em>Percent Descent</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPercentDescent()
	 * @generated
	 * @ordered
	 */
	protected double percentDescent = PERCENT_DESCENT_EDEFAULT;

	/**
	 * The default value of the '{@link #getPercentFlat() <em>Percent Flat</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPercentFlat()
	 * @generated
	 * @ordered
	 */
	protected static final double PERCENT_FLAT_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getPercentFlat() <em>Percent Flat</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPercentFlat()
	 * @generated
	 * @ordered
	 */
	protected double percentFlat = PERCENT_FLAT_EDEFAULT;

	/**
	 * The default value of the '{@link #getAnaerobicPercentage() <em>Anaerobic Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAnaerobicPercentage()
	 * @generated
	 * @ordered
	 */
	protected static final double ANAEROBIC_PERCENTAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getAnaerobicPercentage() <em>Anaerobic Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAnaerobicPercentage()
	 * @generated
	 * @ordered
	 */
	protected double anaerobicPercentage = ANAEROBIC_PERCENTAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getAerobicPercentage() <em>Aerobic Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAerobicPercentage()
	 * @generated
	 * @ordered
	 */
	protected static final double AEROBIC_PERCENTAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getAerobicPercentage() <em>Aerobic Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAerobicPercentage()
	 * @generated
	 * @ordered
	 */
	protected double aerobicPercentage = AEROBIC_PERCENTAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getOtherPercentage() <em>Other Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOtherPercentage()
	 * @generated
	 * @ordered
	 */
	protected static final double OTHER_PERCENTAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getOtherPercentage() <em>Other Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOtherPercentage()
	 * @generated
	 * @ordered
	 */
	protected double otherPercentage = OTHER_PERCENTAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getVo2maxPercentage() <em>Vo2max Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getVo2maxPercentage()
	 * @generated
	 * @ordered
	 */
	protected static final double VO2MAX_PERCENTAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getVo2maxPercentage() <em>Vo2max Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getVo2maxPercentage()
	 * @generated
	 * @ordered
	 */
	protected double vo2maxPercentage = VO2MAX_PERCENTAGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getRecoveryPercentage() <em>Recovery Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRecoveryPercentage()
	 * @generated
	 * @ordered
	 */
	protected static final double RECOVERY_PERCENTAGE_EDEFAULT = 0.0;

	/**
	 * The cached value of the '{@link #getRecoveryPercentage() <em>Recovery Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getRecoveryPercentage()
	 * @generated
	 * @ordered
	 */
	protected double recoveryPercentage = RECOVERY_PERCENTAGE_EDEFAULT;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ExerciseImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return DataPackage.Literals.EXERCISE;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Sport getSport() {
		return sport;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSport(Sport newSport) {
		Sport oldSport = sport;
		sport = newSport == null ? SPORT_EDEFAULT : newSport;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__SPORT, oldSport, sport));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Date getTimestamp() {
		return timestamp;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTimestamp(Date newTimestamp) {
		Date oldTimestamp = timestamp;
		timestamp = newTimestamp;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TIMESTAMP, oldTimestamp, timestamp));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getName() {
		return name;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setName(String newName) {
		String oldName = name;
		name = newName;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__NAME, oldName, name));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public float getEnergyExpenditure() {
		return energyExpenditure;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setEnergyExpenditure(float newEnergyExpenditure) {
		float oldEnergyExpenditure = energyExpenditure;
		energyExpenditure = newEnergyExpenditure;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ENERGY_EXPENDITURE, oldEnergyExpenditure, energyExpenditure));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<DataLog> getDatalogs() {
		if (datalogs == null) {
			datalogs = new EObjectContainmentEList<DataLog>(DataLog.class, this, DataPackage.EXERCISE__DATALOGS);
		}
		return datalogs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public DataLog getFusedDataLog() {
		return fusedDataLog;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public NotificationChain basicSetFusedDataLog(DataLog newFusedDataLog, NotificationChain msgs) {
		DataLog oldFusedDataLog = fusedDataLog;
		fusedDataLog = newFusedDataLog;
		if (eNotificationRequired()) {
			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__FUSED_DATA_LOG, oldFusedDataLog, newFusedDataLog);
			if (msgs == null) msgs = notification; else msgs.add(notification);
		}
		return msgs;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setFusedDataLog(DataLog newFusedDataLog) {
		if (newFusedDataLog != fusedDataLog) {
			NotificationChain msgs = null;
			if (fusedDataLog != null)
				msgs = ((InternalEObject)fusedDataLog).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DataPackage.EXERCISE__FUSED_DATA_LOG, null, msgs);
			if (newFusedDataLog != null)
				msgs = ((InternalEObject)newFusedDataLog).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DataPackage.EXERCISE__FUSED_DATA_LOG, null, msgs);
			msgs = basicSetFusedDataLog(newFusedDataLog, msgs);
			if (msgs != null) msgs.dispatch();
		}
		else if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__FUSED_DATA_LOG, newFusedDataLog, newFusedDataLog));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public long getTotalTime() {
		return totalTime;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTotalTime(long newTotalTime) {
		long oldTotalTime = totalTime;
		totalTime = newTotalTime;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TOTAL_TIME, oldTotalTime, totalTime));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public long getTotalTimePace() {
		return totalTimePace;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTotalTimePace(long newTotalTimePace) {
		long oldTotalTimePace = totalTimePace;
		totalTimePace = newTotalTimePace;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TOTAL_TIME_PACE, oldTotalTimePace, totalTimePace));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public long getMovingTime() {
		return movingTime;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMovingTime(long newMovingTime) {
		long oldMovingTime = movingTime;
		movingTime = newMovingTime;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__MOVING_TIME, oldMovingTime, movingTime));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public long getMovingTimePace() {
		return movingTimePace;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMovingTimePace(long newMovingTimePace) {
		long oldMovingTimePace = movingTimePace;
		movingTimePace = newMovingTimePace;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__MOVING_TIME_PACE, oldMovingTimePace, movingTimePace));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDistance() {
		return distance;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDistance(double newDistance) {
		double oldDistance = distance;
		distance = newDistance;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__DISTANCE, oldDistance, distance));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getMovingSpeedAverage() {
		return movingSpeedAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMovingSpeedAverage(double newMovingSpeedAverage) {
		double oldMovingSpeedAverage = movingSpeedAverage;
		movingSpeedAverage = newMovingSpeedAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__MOVING_SPEED_AVERAGE, oldMovingSpeedAverage, movingSpeedAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getMovingSpeedMaximum() {
		return movingSpeedMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMovingSpeedMaximum(double newMovingSpeedMaximum) {
		double oldMovingSpeedMaximum = movingSpeedMaximum;
		movingSpeedMaximum = newMovingSpeedMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__MOVING_SPEED_MAXIMUM, oldMovingSpeedMaximum, movingSpeedMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getAscentSpeedAverage() {
		return ascentSpeedAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAscentSpeedAverage(double newAscentSpeedAverage) {
		double oldAscentSpeedAverage = ascentSpeedAverage;
		ascentSpeedAverage = newAscentSpeedAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ASCENT_SPEED_AVERAGE, oldAscentSpeedAverage, ascentSpeedAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getAscentSpeedMaximum() {
		return ascentSpeedMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAscentSpeedMaximum(double newAscentSpeedMaximum) {
		double oldAscentSpeedMaximum = ascentSpeedMaximum;
		ascentSpeedMaximum = newAscentSpeedMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ASCENT_SPEED_MAXIMUM, oldAscentSpeedMaximum, ascentSpeedMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDescentSpeedAverage() {
		return descentSpeedAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDescentSpeedAverage(double newDescentSpeedAverage) {
		double oldDescentSpeedAverage = descentSpeedAverage;
		descentSpeedAverage = newDescentSpeedAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__DESCENT_SPEED_AVERAGE, oldDescentSpeedAverage, descentSpeedAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDescentSpeedMaximum() {
		return descentSpeedMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDescentSpeedMaximum(double newDescentSpeedMaximum) {
		double oldDescentSpeedMaximum = descentSpeedMaximum;
		descentSpeedMaximum = newDescentSpeedMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__DESCENT_SPEED_MAXIMUM, oldDescentSpeedMaximum, descentSpeedMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getAscentGradeAverage() {
		return ascentGradeAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAscentGradeAverage(double newAscentGradeAverage) {
		double oldAscentGradeAverage = ascentGradeAverage;
		ascentGradeAverage = newAscentGradeAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ASCENT_GRADE_AVERAGE, oldAscentGradeAverage, ascentGradeAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getAscentGradeMaximum() {
		return ascentGradeMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAscentGradeMaximum(double newAscentGradeMaximum) {
		double oldAscentGradeMaximum = ascentGradeMaximum;
		ascentGradeMaximum = newAscentGradeMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ASCENT_GRADE_MAXIMUM, oldAscentGradeMaximum, ascentGradeMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDescentGradeAverage() {
		return descentGradeAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDescentGradeAverage(double newDescentGradeAverage) {
		double oldDescentGradeAverage = descentGradeAverage;
		descentGradeAverage = newDescentGradeAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__DESCENT_GRADE_AVERAGE, oldDescentGradeAverage, descentGradeAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDescentGradeMaximum() {
		return descentGradeMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDescentGradeMaximum(double newDescentGradeMaximum) {
		double oldDescentGradeMaximum = descentGradeMaximum;
		descentGradeMaximum = newDescentGradeMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__DESCENT_GRADE_MAXIMUM, oldDescentGradeMaximum, descentGradeMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getElevationGain() {
		return elevationGain;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setElevationGain(double newElevationGain) {
		double oldElevationGain = elevationGain;
		elevationGain = newElevationGain;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ELEVATION_GAIN, oldElevationGain, elevationGain));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getElevationLoss() {
		return elevationLoss;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setElevationLoss(double newElevationLoss) {
		double oldElevationLoss = elevationLoss;
		elevationLoss = newElevationLoss;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ELEVATION_LOSS, oldElevationLoss, elevationLoss));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getElevationStart() {
		return elevationStart;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setElevationStart(double newElevationStart) {
		double oldElevationStart = elevationStart;
		elevationStart = newElevationStart;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ELEVATION_START, oldElevationStart, elevationStart));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getElevationFinish() {
		return elevationFinish;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setElevationFinish(double newElevationFinish) {
		double oldElevationFinish = elevationFinish;
		elevationFinish = newElevationFinish;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ELEVATION_FINISH, oldElevationFinish, elevationFinish));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getElevationMaximum() {
		return elevationMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setElevationMaximum(double newElevationMaximum) {
		double oldElevationMaximum = elevationMaximum;
		elevationMaximum = newElevationMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ELEVATION_MAXIMUM, oldElevationMaximum, elevationMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getElevationMinimum() {
		return elevationMinimum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setElevationMinimum(double newElevationMinimum) {
		double oldElevationMinimum = elevationMinimum;
		elevationMinimum = newElevationMinimum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ELEVATION_MINIMUM, oldElevationMinimum, elevationMinimum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getHeartrateAverage() {
		return heartrateAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHeartrateAverage(double newHeartrateAverage) {
		double oldHeartrateAverage = heartrateAverage;
		heartrateAverage = newHeartrateAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__HEARTRATE_AVERAGE, oldHeartrateAverage, heartrateAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getHeartrateMaximum() {
		return heartrateMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHeartrateMaximum(double newHeartrateMaximum) {
		double oldHeartrateMaximum = heartrateMaximum;
		heartrateMaximum = newHeartrateMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__HEARTRATE_MAXIMUM, oldHeartrateMaximum, heartrateMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getHeartrateMinimum() {
		return heartrateMinimum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHeartrateMinimum(double newHeartrateMinimum) {
		double oldHeartrateMinimum = heartrateMinimum;
		heartrateMinimum = newHeartrateMinimum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__HEARTRATE_MINIMUM, oldHeartrateMinimum, heartrateMinimum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getTemperatureStart() {
		return temperatureStart;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTemperatureStart(double newTemperatureStart) {
		double oldTemperatureStart = temperatureStart;
		temperatureStart = newTemperatureStart;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TEMPERATURE_START, oldTemperatureStart, temperatureStart));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getTemperatureFinish() {
		return temperatureFinish;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTemperatureFinish(double newTemperatureFinish) {
		double oldTemperatureFinish = temperatureFinish;
		temperatureFinish = newTemperatureFinish;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TEMPERATURE_FINISH, oldTemperatureFinish, temperatureFinish));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getTemperatureMaximum() {
		return temperatureMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTemperatureMaximum(double newTemperatureMaximum) {
		double oldTemperatureMaximum = temperatureMaximum;
		temperatureMaximum = newTemperatureMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TEMPERATURE_MAXIMUM, oldTemperatureMaximum, temperatureMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getTemperatureMinimum() {
		return temperatureMinimum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTemperatureMinimum(double newTemperatureMinimum) {
		double oldTemperatureMinimum = temperatureMinimum;
		temperatureMinimum = newTemperatureMinimum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TEMPERATURE_MINIMUM, oldTemperatureMinimum, temperatureMinimum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getTemperatureAverage() {
		return temperatureAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTemperatureAverage(double newTemperatureAverage) {
		double oldTemperatureAverage = temperatureAverage;
		temperatureAverage = newTemperatureAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__TEMPERATURE_AVERAGE, oldTemperatureAverage, temperatureAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getRelativehumidityMinimum() {
		return relativehumidityMinimum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setRelativehumidityMinimum(double newRelativehumidityMinimum) {
		double oldRelativehumidityMinimum = relativehumidityMinimum;
		relativehumidityMinimum = newRelativehumidityMinimum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__RELATIVEHUMIDITY_MINIMUM, oldRelativehumidityMinimum, relativehumidityMinimum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getRelativehumidityAverage() {
		return relativehumidityAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setRelativehumidityAverage(double newRelativehumidityAverage) {
		double oldRelativehumidityAverage = relativehumidityAverage;
		relativehumidityAverage = newRelativehumidityAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__RELATIVEHUMIDITY_AVERAGE, oldRelativehumidityAverage, relativehumidityAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getWindspeedMinimum() {
		return windspeedMinimum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setWindspeedMinimum(double newWindspeedMinimum) {
		double oldWindspeedMinimum = windspeedMinimum;
		windspeedMinimum = newWindspeedMinimum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__WINDSPEED_MINIMUM, oldWindspeedMinimum, windspeedMinimum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getWindspeedMaximum() {
		return windspeedMaximum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setWindspeedMaximum(double newWindspeedMaximum) {
		double oldWindspeedMaximum = windspeedMaximum;
		windspeedMaximum = newWindspeedMaximum;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__WINDSPEED_MAXIMUM, oldWindspeedMaximum, windspeedMaximum));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getWindspeedAverage() {
		return windspeedAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setWindspeedAverage(double newWindspeedAverage) {
		double oldWindspeedAverage = windspeedAverage;
		windspeedAverage = newWindspeedAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__WINDSPEED_AVERAGE, oldWindspeedAverage, windspeedAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getWinddirectionAverage() {
		return winddirectionAverage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setWinddirectionAverage(double newWinddirectionAverage) {
		double oldWinddirectionAverage = winddirectionAverage;
		winddirectionAverage = newWinddirectionAverage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__WINDDIRECTION_AVERAGE, oldWinddirectionAverage, winddirectionAverage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDistanceAscent() {
		return distanceAscent;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDistanceAscent(double newDistanceAscent) {
		double oldDistanceAscent = distanceAscent;
		distanceAscent = newDistanceAscent;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__DISTANCE_ASCENT, oldDistanceAscent, distanceAscent));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getDistanceDescent() {
		return distanceDescent;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDistanceDescent(double newDistanceDescent) {
		double oldDistanceDescent = distanceDescent;
		distanceDescent = newDistanceDescent;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__DISTANCE_DESCENT, oldDistanceDescent, distanceDescent));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getPercentAscent() {
		return percentAscent;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPercentAscent(double newPercentAscent) {
		double oldPercentAscent = percentAscent;
		percentAscent = newPercentAscent;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__PERCENT_ASCENT, oldPercentAscent, percentAscent));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getPercentDescent() {
		return percentDescent;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPercentDescent(double newPercentDescent) {
		double oldPercentDescent = percentDescent;
		percentDescent = newPercentDescent;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__PERCENT_DESCENT, oldPercentDescent, percentDescent));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getPercentFlat() {
		return percentFlat;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPercentFlat(double newPercentFlat) {
		double oldPercentFlat = percentFlat;
		percentFlat = newPercentFlat;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__PERCENT_FLAT, oldPercentFlat, percentFlat));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getAnaerobicPercentage() {
		return anaerobicPercentage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAnaerobicPercentage(double newAnaerobicPercentage) {
		double oldAnaerobicPercentage = anaerobicPercentage;
		anaerobicPercentage = newAnaerobicPercentage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__ANAEROBIC_PERCENTAGE, oldAnaerobicPercentage, anaerobicPercentage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getAerobicPercentage() {
		return aerobicPercentage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAerobicPercentage(double newAerobicPercentage) {
		double oldAerobicPercentage = aerobicPercentage;
		aerobicPercentage = newAerobicPercentage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__AEROBIC_PERCENTAGE, oldAerobicPercentage, aerobicPercentage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getOtherPercentage() {
		return otherPercentage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOtherPercentage(double newOtherPercentage) {
		double oldOtherPercentage = otherPercentage;
		otherPercentage = newOtherPercentage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__OTHER_PERCENTAGE, oldOtherPercentage, otherPercentage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getVo2maxPercentage() {
		return vo2maxPercentage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setVo2maxPercentage(double newVo2maxPercentage) {
		double oldVo2maxPercentage = vo2maxPercentage;
		vo2maxPercentage = newVo2maxPercentage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__VO2MAX_PERCENTAGE, oldVo2maxPercentage, vo2maxPercentage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public double getRecoveryPercentage() {
		return recoveryPercentage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setRecoveryPercentage(double newRecoveryPercentage) {
		double oldRecoveryPercentage = recoveryPercentage;
		recoveryPercentage = newRecoveryPercentage;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, DataPackage.EXERCISE__RECOVERY_PERCENTAGE, oldRecoveryPercentage, recoveryPercentage));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
		switch (featureID) {
			case DataPackage.EXERCISE__DATALOGS:
				return ((InternalEList<?>)getDatalogs()).basicRemove(otherEnd, msgs);
			case DataPackage.EXERCISE__FUSED_DATA_LOG:
				return basicSetFusedDataLog(null, msgs);
		}
		return super.eInverseRemove(otherEnd, featureID, msgs);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case DataPackage.EXERCISE__SPORT:
				return getSport();
			case DataPackage.EXERCISE__TIMESTAMP:
				return getTimestamp();
			case DataPackage.EXERCISE__NAME:
				return getName();
			case DataPackage.EXERCISE__ENERGY_EXPENDITURE:
				return getEnergyExpenditure();
			case DataPackage.EXERCISE__DATALOGS:
				return getDatalogs();
			case DataPackage.EXERCISE__FUSED_DATA_LOG:
				return getFusedDataLog();
			case DataPackage.EXERCISE__TOTAL_TIME:
				return getTotalTime();
			case DataPackage.EXERCISE__TOTAL_TIME_PACE:
				return getTotalTimePace();
			case DataPackage.EXERCISE__MOVING_TIME:
				return getMovingTime();
			case DataPackage.EXERCISE__MOVING_TIME_PACE:
				return getMovingTimePace();
			case DataPackage.EXERCISE__DISTANCE:
				return getDistance();
			case DataPackage.EXERCISE__MOVING_SPEED_AVERAGE:
				return getMovingSpeedAverage();
			case DataPackage.EXERCISE__MOVING_SPEED_MAXIMUM:
				return getMovingSpeedMaximum();
			case DataPackage.EXERCISE__ASCENT_SPEED_AVERAGE:
				return getAscentSpeedAverage();
			case DataPackage.EXERCISE__ASCENT_SPEED_MAXIMUM:
				return getAscentSpeedMaximum();
			case DataPackage.EXERCISE__DESCENT_SPEED_AVERAGE:
				return getDescentSpeedAverage();
			case DataPackage.EXERCISE__DESCENT_SPEED_MAXIMUM:
				return getDescentSpeedMaximum();
			case DataPackage.EXERCISE__ASCENT_GRADE_AVERAGE:
				return getAscentGradeAverage();
			case DataPackage.EXERCISE__ASCENT_GRADE_MAXIMUM:
				return getAscentGradeMaximum();
			case DataPackage.EXERCISE__DESCENT_GRADE_AVERAGE:
				return getDescentGradeAverage();
			case DataPackage.EXERCISE__DESCENT_GRADE_MAXIMUM:
				return getDescentGradeMaximum();
			case DataPackage.EXERCISE__ELEVATION_GAIN:
				return getElevationGain();
			case DataPackage.EXERCISE__ELEVATION_LOSS:
				return getElevationLoss();
			case DataPackage.EXERCISE__ELEVATION_START:
				return getElevationStart();
			case DataPackage.EXERCISE__ELEVATION_FINISH:
				return getElevationFinish();
			case DataPackage.EXERCISE__ELEVATION_MAXIMUM:
				return getElevationMaximum();
			case DataPackage.EXERCISE__ELEVATION_MINIMUM:
				return getElevationMinimum();
			case DataPackage.EXERCISE__HEARTRATE_AVERAGE:
				return getHeartrateAverage();
			case DataPackage.EXERCISE__HEARTRATE_MAXIMUM:
				return getHeartrateMaximum();
			case DataPackage.EXERCISE__HEARTRATE_MINIMUM:
				return getHeartrateMinimum();
			case DataPackage.EXERCISE__TEMPERATURE_START:
				return getTemperatureStart();
			case DataPackage.EXERCISE__TEMPERATURE_FINISH:
				return getTemperatureFinish();
			case DataPackage.EXERCISE__TEMPERATURE_MAXIMUM:
				return getTemperatureMaximum();
			case DataPackage.EXERCISE__TEMPERATURE_MINIMUM:
				return getTemperatureMinimum();
			case DataPackage.EXERCISE__TEMPERATURE_AVERAGE:
				return getTemperatureAverage();
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_MINIMUM:
				return getRelativehumidityMinimum();
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_AVERAGE:
				return getRelativehumidityAverage();
			case DataPackage.EXERCISE__WINDSPEED_MINIMUM:
				return getWindspeedMinimum();
			case DataPackage.EXERCISE__WINDSPEED_MAXIMUM:
				return getWindspeedMaximum();
			case DataPackage.EXERCISE__WINDSPEED_AVERAGE:
				return getWindspeedAverage();
			case DataPackage.EXERCISE__WINDDIRECTION_AVERAGE:
				return getWinddirectionAverage();
			case DataPackage.EXERCISE__DISTANCE_ASCENT:
				return getDistanceAscent();
			case DataPackage.EXERCISE__DISTANCE_DESCENT:
				return getDistanceDescent();
			case DataPackage.EXERCISE__PERCENT_ASCENT:
				return getPercentAscent();
			case DataPackage.EXERCISE__PERCENT_DESCENT:
				return getPercentDescent();
			case DataPackage.EXERCISE__PERCENT_FLAT:
				return getPercentFlat();
			case DataPackage.EXERCISE__ANAEROBIC_PERCENTAGE:
				return getAnaerobicPercentage();
			case DataPackage.EXERCISE__AEROBIC_PERCENTAGE:
				return getAerobicPercentage();
			case DataPackage.EXERCISE__OTHER_PERCENTAGE:
				return getOtherPercentage();
			case DataPackage.EXERCISE__VO2MAX_PERCENTAGE:
				return getVo2maxPercentage();
			case DataPackage.EXERCISE__RECOVERY_PERCENTAGE:
				return getRecoveryPercentage();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case DataPackage.EXERCISE__SPORT:
				setSport((Sport)newValue);
				return;
			case DataPackage.EXERCISE__TIMESTAMP:
				setTimestamp((Date)newValue);
				return;
			case DataPackage.EXERCISE__NAME:
				setName((String)newValue);
				return;
			case DataPackage.EXERCISE__ENERGY_EXPENDITURE:
				setEnergyExpenditure((Float)newValue);
				return;
			case DataPackage.EXERCISE__DATALOGS:
				getDatalogs().clear();
				getDatalogs().addAll((Collection<? extends DataLog>)newValue);
				return;
			case DataPackage.EXERCISE__FUSED_DATA_LOG:
				setFusedDataLog((DataLog)newValue);
				return;
			case DataPackage.EXERCISE__TOTAL_TIME:
				setTotalTime((Long)newValue);
				return;
			case DataPackage.EXERCISE__TOTAL_TIME_PACE:
				setTotalTimePace((Long)newValue);
				return;
			case DataPackage.EXERCISE__MOVING_TIME:
				setMovingTime((Long)newValue);
				return;
			case DataPackage.EXERCISE__MOVING_TIME_PACE:
				setMovingTimePace((Long)newValue);
				return;
			case DataPackage.EXERCISE__DISTANCE:
				setDistance((Double)newValue);
				return;
			case DataPackage.EXERCISE__MOVING_SPEED_AVERAGE:
				setMovingSpeedAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__MOVING_SPEED_MAXIMUM:
				setMovingSpeedMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__ASCENT_SPEED_AVERAGE:
				setAscentSpeedAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__ASCENT_SPEED_MAXIMUM:
				setAscentSpeedMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__DESCENT_SPEED_AVERAGE:
				setDescentSpeedAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__DESCENT_SPEED_MAXIMUM:
				setDescentSpeedMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__ASCENT_GRADE_AVERAGE:
				setAscentGradeAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__ASCENT_GRADE_MAXIMUM:
				setAscentGradeMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__DESCENT_GRADE_AVERAGE:
				setDescentGradeAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__DESCENT_GRADE_MAXIMUM:
				setDescentGradeMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__ELEVATION_GAIN:
				setElevationGain((Double)newValue);
				return;
			case DataPackage.EXERCISE__ELEVATION_LOSS:
				setElevationLoss((Double)newValue);
				return;
			case DataPackage.EXERCISE__ELEVATION_START:
				setElevationStart((Double)newValue);
				return;
			case DataPackage.EXERCISE__ELEVATION_FINISH:
				setElevationFinish((Double)newValue);
				return;
			case DataPackage.EXERCISE__ELEVATION_MAXIMUM:
				setElevationMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__ELEVATION_MINIMUM:
				setElevationMinimum((Double)newValue);
				return;
			case DataPackage.EXERCISE__HEARTRATE_AVERAGE:
				setHeartrateAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__HEARTRATE_MAXIMUM:
				setHeartrateMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__HEARTRATE_MINIMUM:
				setHeartrateMinimum((Double)newValue);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_START:
				setTemperatureStart((Double)newValue);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_FINISH:
				setTemperatureFinish((Double)newValue);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_MAXIMUM:
				setTemperatureMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_MINIMUM:
				setTemperatureMinimum((Double)newValue);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_AVERAGE:
				setTemperatureAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_MINIMUM:
				setRelativehumidityMinimum((Double)newValue);
				return;
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_AVERAGE:
				setRelativehumidityAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__WINDSPEED_MINIMUM:
				setWindspeedMinimum((Double)newValue);
				return;
			case DataPackage.EXERCISE__WINDSPEED_MAXIMUM:
				setWindspeedMaximum((Double)newValue);
				return;
			case DataPackage.EXERCISE__WINDSPEED_AVERAGE:
				setWindspeedAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__WINDDIRECTION_AVERAGE:
				setWinddirectionAverage((Double)newValue);
				return;
			case DataPackage.EXERCISE__DISTANCE_ASCENT:
				setDistanceAscent((Double)newValue);
				return;
			case DataPackage.EXERCISE__DISTANCE_DESCENT:
				setDistanceDescent((Double)newValue);
				return;
			case DataPackage.EXERCISE__PERCENT_ASCENT:
				setPercentAscent((Double)newValue);
				return;
			case DataPackage.EXERCISE__PERCENT_DESCENT:
				setPercentDescent((Double)newValue);
				return;
			case DataPackage.EXERCISE__PERCENT_FLAT:
				setPercentFlat((Double)newValue);
				return;
			case DataPackage.EXERCISE__ANAEROBIC_PERCENTAGE:
				setAnaerobicPercentage((Double)newValue);
				return;
			case DataPackage.EXERCISE__AEROBIC_PERCENTAGE:
				setAerobicPercentage((Double)newValue);
				return;
			case DataPackage.EXERCISE__OTHER_PERCENTAGE:
				setOtherPercentage((Double)newValue);
				return;
			case DataPackage.EXERCISE__VO2MAX_PERCENTAGE:
				setVo2maxPercentage((Double)newValue);
				return;
			case DataPackage.EXERCISE__RECOVERY_PERCENTAGE:
				setRecoveryPercentage((Double)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case DataPackage.EXERCISE__SPORT:
				setSport(SPORT_EDEFAULT);
				return;
			case DataPackage.EXERCISE__TIMESTAMP:
				setTimestamp(TIMESTAMP_EDEFAULT);
				return;
			case DataPackage.EXERCISE__NAME:
				setName(NAME_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ENERGY_EXPENDITURE:
				setEnergyExpenditure(ENERGY_EXPENDITURE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DATALOGS:
				getDatalogs().clear();
				return;
			case DataPackage.EXERCISE__FUSED_DATA_LOG:
				setFusedDataLog((DataLog)null);
				return;
			case DataPackage.EXERCISE__TOTAL_TIME:
				setTotalTime(TOTAL_TIME_EDEFAULT);
				return;
			case DataPackage.EXERCISE__TOTAL_TIME_PACE:
				setTotalTimePace(TOTAL_TIME_PACE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__MOVING_TIME:
				setMovingTime(MOVING_TIME_EDEFAULT);
				return;
			case DataPackage.EXERCISE__MOVING_TIME_PACE:
				setMovingTimePace(MOVING_TIME_PACE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DISTANCE:
				setDistance(DISTANCE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__MOVING_SPEED_AVERAGE:
				setMovingSpeedAverage(MOVING_SPEED_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__MOVING_SPEED_MAXIMUM:
				setMovingSpeedMaximum(MOVING_SPEED_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ASCENT_SPEED_AVERAGE:
				setAscentSpeedAverage(ASCENT_SPEED_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ASCENT_SPEED_MAXIMUM:
				setAscentSpeedMaximum(ASCENT_SPEED_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DESCENT_SPEED_AVERAGE:
				setDescentSpeedAverage(DESCENT_SPEED_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DESCENT_SPEED_MAXIMUM:
				setDescentSpeedMaximum(DESCENT_SPEED_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ASCENT_GRADE_AVERAGE:
				setAscentGradeAverage(ASCENT_GRADE_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ASCENT_GRADE_MAXIMUM:
				setAscentGradeMaximum(ASCENT_GRADE_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DESCENT_GRADE_AVERAGE:
				setDescentGradeAverage(DESCENT_GRADE_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DESCENT_GRADE_MAXIMUM:
				setDescentGradeMaximum(DESCENT_GRADE_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ELEVATION_GAIN:
				setElevationGain(ELEVATION_GAIN_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ELEVATION_LOSS:
				setElevationLoss(ELEVATION_LOSS_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ELEVATION_START:
				setElevationStart(ELEVATION_START_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ELEVATION_FINISH:
				setElevationFinish(ELEVATION_FINISH_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ELEVATION_MAXIMUM:
				setElevationMaximum(ELEVATION_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ELEVATION_MINIMUM:
				setElevationMinimum(ELEVATION_MINIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__HEARTRATE_AVERAGE:
				setHeartrateAverage(HEARTRATE_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__HEARTRATE_MAXIMUM:
				setHeartrateMaximum(HEARTRATE_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__HEARTRATE_MINIMUM:
				setHeartrateMinimum(HEARTRATE_MINIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_START:
				setTemperatureStart(TEMPERATURE_START_EDEFAULT);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_FINISH:
				setTemperatureFinish(TEMPERATURE_FINISH_EDEFAULT);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_MAXIMUM:
				setTemperatureMaximum(TEMPERATURE_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_MINIMUM:
				setTemperatureMinimum(TEMPERATURE_MINIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__TEMPERATURE_AVERAGE:
				setTemperatureAverage(TEMPERATURE_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_MINIMUM:
				setRelativehumidityMinimum(RELATIVEHUMIDITY_MINIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_AVERAGE:
				setRelativehumidityAverage(RELATIVEHUMIDITY_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__WINDSPEED_MINIMUM:
				setWindspeedMinimum(WINDSPEED_MINIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__WINDSPEED_MAXIMUM:
				setWindspeedMaximum(WINDSPEED_MAXIMUM_EDEFAULT);
				return;
			case DataPackage.EXERCISE__WINDSPEED_AVERAGE:
				setWindspeedAverage(WINDSPEED_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__WINDDIRECTION_AVERAGE:
				setWinddirectionAverage(WINDDIRECTION_AVERAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DISTANCE_ASCENT:
				setDistanceAscent(DISTANCE_ASCENT_EDEFAULT);
				return;
			case DataPackage.EXERCISE__DISTANCE_DESCENT:
				setDistanceDescent(DISTANCE_DESCENT_EDEFAULT);
				return;
			case DataPackage.EXERCISE__PERCENT_ASCENT:
				setPercentAscent(PERCENT_ASCENT_EDEFAULT);
				return;
			case DataPackage.EXERCISE__PERCENT_DESCENT:
				setPercentDescent(PERCENT_DESCENT_EDEFAULT);
				return;
			case DataPackage.EXERCISE__PERCENT_FLAT:
				setPercentFlat(PERCENT_FLAT_EDEFAULT);
				return;
			case DataPackage.EXERCISE__ANAEROBIC_PERCENTAGE:
				setAnaerobicPercentage(ANAEROBIC_PERCENTAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__AEROBIC_PERCENTAGE:
				setAerobicPercentage(AEROBIC_PERCENTAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__OTHER_PERCENTAGE:
				setOtherPercentage(OTHER_PERCENTAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__VO2MAX_PERCENTAGE:
				setVo2maxPercentage(VO2MAX_PERCENTAGE_EDEFAULT);
				return;
			case DataPackage.EXERCISE__RECOVERY_PERCENTAGE:
				setRecoveryPercentage(RECOVERY_PERCENTAGE_EDEFAULT);
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case DataPackage.EXERCISE__SPORT:
				return sport != SPORT_EDEFAULT;
			case DataPackage.EXERCISE__TIMESTAMP:
				return TIMESTAMP_EDEFAULT == null ? timestamp != null : !TIMESTAMP_EDEFAULT.equals(timestamp);
			case DataPackage.EXERCISE__NAME:
				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
			case DataPackage.EXERCISE__ENERGY_EXPENDITURE:
				return energyExpenditure != ENERGY_EXPENDITURE_EDEFAULT;
			case DataPackage.EXERCISE__DATALOGS:
				return datalogs != null && !datalogs.isEmpty();
			case DataPackage.EXERCISE__FUSED_DATA_LOG:
				return fusedDataLog != null;
			case DataPackage.EXERCISE__TOTAL_TIME:
				return totalTime != TOTAL_TIME_EDEFAULT;
			case DataPackage.EXERCISE__TOTAL_TIME_PACE:
				return totalTimePace != TOTAL_TIME_PACE_EDEFAULT;
			case DataPackage.EXERCISE__MOVING_TIME:
				return movingTime != MOVING_TIME_EDEFAULT;
			case DataPackage.EXERCISE__MOVING_TIME_PACE:
				return movingTimePace != MOVING_TIME_PACE_EDEFAULT;
			case DataPackage.EXERCISE__DISTANCE:
				return distance != DISTANCE_EDEFAULT;
			case DataPackage.EXERCISE__MOVING_SPEED_AVERAGE:
				return movingSpeedAverage != MOVING_SPEED_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__MOVING_SPEED_MAXIMUM:
				return movingSpeedMaximum != MOVING_SPEED_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__ASCENT_SPEED_AVERAGE:
				return ascentSpeedAverage != ASCENT_SPEED_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__ASCENT_SPEED_MAXIMUM:
				return ascentSpeedMaximum != ASCENT_SPEED_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__DESCENT_SPEED_AVERAGE:
				return descentSpeedAverage != DESCENT_SPEED_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__DESCENT_SPEED_MAXIMUM:
				return descentSpeedMaximum != DESCENT_SPEED_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__ASCENT_GRADE_AVERAGE:
				return ascentGradeAverage != ASCENT_GRADE_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__ASCENT_GRADE_MAXIMUM:
				return ascentGradeMaximum != ASCENT_GRADE_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__DESCENT_GRADE_AVERAGE:
				return descentGradeAverage != DESCENT_GRADE_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__DESCENT_GRADE_MAXIMUM:
				return descentGradeMaximum != DESCENT_GRADE_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__ELEVATION_GAIN:
				return elevationGain != ELEVATION_GAIN_EDEFAULT;
			case DataPackage.EXERCISE__ELEVATION_LOSS:
				return elevationLoss != ELEVATION_LOSS_EDEFAULT;
			case DataPackage.EXERCISE__ELEVATION_START:
				return elevationStart != ELEVATION_START_EDEFAULT;
			case DataPackage.EXERCISE__ELEVATION_FINISH:
				return elevationFinish != ELEVATION_FINISH_EDEFAULT;
			case DataPackage.EXERCISE__ELEVATION_MAXIMUM:
				return elevationMaximum != ELEVATION_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__ELEVATION_MINIMUM:
				return elevationMinimum != ELEVATION_MINIMUM_EDEFAULT;
			case DataPackage.EXERCISE__HEARTRATE_AVERAGE:
				return heartrateAverage != HEARTRATE_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__HEARTRATE_MAXIMUM:
				return heartrateMaximum != HEARTRATE_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__HEARTRATE_MINIMUM:
				return heartrateMinimum != HEARTRATE_MINIMUM_EDEFAULT;
			case DataPackage.EXERCISE__TEMPERATURE_START:
				return temperatureStart != TEMPERATURE_START_EDEFAULT;
			case DataPackage.EXERCISE__TEMPERATURE_FINISH:
				return temperatureFinish != TEMPERATURE_FINISH_EDEFAULT;
			case DataPackage.EXERCISE__TEMPERATURE_MAXIMUM:
				return temperatureMaximum != TEMPERATURE_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__TEMPERATURE_MINIMUM:
				return temperatureMinimum != TEMPERATURE_MINIMUM_EDEFAULT;
			case DataPackage.EXERCISE__TEMPERATURE_AVERAGE:
				return temperatureAverage != TEMPERATURE_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_MINIMUM:
				return relativehumidityMinimum != RELATIVEHUMIDITY_MINIMUM_EDEFAULT;
			case DataPackage.EXERCISE__RELATIVEHUMIDITY_AVERAGE:
				return relativehumidityAverage != RELATIVEHUMIDITY_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__WINDSPEED_MINIMUM:
				return windspeedMinimum != WINDSPEED_MINIMUM_EDEFAULT;
			case DataPackage.EXERCISE__WINDSPEED_MAXIMUM:
				return windspeedMaximum != WINDSPEED_MAXIMUM_EDEFAULT;
			case DataPackage.EXERCISE__WINDSPEED_AVERAGE:
				return windspeedAverage != WINDSPEED_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__WINDDIRECTION_AVERAGE:
				return winddirectionAverage != WINDDIRECTION_AVERAGE_EDEFAULT;
			case DataPackage.EXERCISE__DISTANCE_ASCENT:
				return distanceAscent != DISTANCE_ASCENT_EDEFAULT;
			case DataPackage.EXERCISE__DISTANCE_DESCENT:
				return distanceDescent != DISTANCE_DESCENT_EDEFAULT;
			case DataPackage.EXERCISE__PERCENT_ASCENT:
				return percentAscent != PERCENT_ASCENT_EDEFAULT;
			case DataPackage.EXERCISE__PERCENT_DESCENT:
				return percentDescent != PERCENT_DESCENT_EDEFAULT;
			case DataPackage.EXERCISE__PERCENT_FLAT:
				return percentFlat != PERCENT_FLAT_EDEFAULT;
			case DataPackage.EXERCISE__ANAEROBIC_PERCENTAGE:
				return anaerobicPercentage != ANAEROBIC_PERCENTAGE_EDEFAULT;
			case DataPackage.EXERCISE__AEROBIC_PERCENTAGE:
				return aerobicPercentage != AEROBIC_PERCENTAGE_EDEFAULT;
			case DataPackage.EXERCISE__OTHER_PERCENTAGE:
				return otherPercentage != OTHER_PERCENTAGE_EDEFAULT;
			case DataPackage.EXERCISE__VO2MAX_PERCENTAGE:
				return vo2maxPercentage != VO2MAX_PERCENTAGE_EDEFAULT;
			case DataPackage.EXERCISE__RECOVERY_PERCENTAGE:
				return recoveryPercentage != RECOVERY_PERCENTAGE_EDEFAULT;
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (sport: ");
		result.append(sport);
		result.append(", timestamp: ");
		result.append(timestamp);
		result.append(", name: ");
		result.append(name);
		result.append(", energyExpenditure: ");
		result.append(energyExpenditure);
		result.append(", totalTime: ");
		result.append(totalTime);
		result.append(", totalTimePace: ");
		result.append(totalTimePace);
		result.append(", movingTime: ");
		result.append(movingTime);
		result.append(", movingTimePace: ");
		result.append(movingTimePace);
		result.append(", distance: ");
		result.append(distance);
		result.append(", movingSpeedAverage: ");
		result.append(movingSpeedAverage);
		result.append(", movingSpeedMaximum: ");
		result.append(movingSpeedMaximum);
		result.append(", ascentSpeedAverage: ");
		result.append(ascentSpeedAverage);
		result.append(", ascentSpeedMaximum: ");
		result.append(ascentSpeedMaximum);
		result.append(", descentSpeedAverage: ");
		result.append(descentSpeedAverage);
		result.append(", descentSpeedMaximum: ");
		result.append(descentSpeedMaximum);
		result.append(", ascentGradeAverage: ");
		result.append(ascentGradeAverage);
		result.append(", ascentGradeMaximum: ");
		result.append(ascentGradeMaximum);
		result.append(", descentGradeAverage: ");
		result.append(descentGradeAverage);
		result.append(", descentGradeMaximum: ");
		result.append(descentGradeMaximum);
		result.append(", elevationGain: ");
		result.append(elevationGain);
		result.append(", elevationLoss: ");
		result.append(elevationLoss);
		result.append(", elevationStart: ");
		result.append(elevationStart);
		result.append(", elevationFinish: ");
		result.append(elevationFinish);
		result.append(", elevationMaximum: ");
		result.append(elevationMaximum);
		result.append(", elevationMinimum: ");
		result.append(elevationMinimum);
		result.append(", heartrateAverage: ");
		result.append(heartrateAverage);
		result.append(", heartrateMaximum: ");
		result.append(heartrateMaximum);
		result.append(", heartrateMinimum: ");
		result.append(heartrateMinimum);
		result.append(", temperatureStart: ");
		result.append(temperatureStart);
		result.append(", temperatureFinish: ");
		result.append(temperatureFinish);
		result.append(", temperatureMaximum: ");
		result.append(temperatureMaximum);
		result.append(", temperatureMinimum: ");
		result.append(temperatureMinimum);
		result.append(", temperatureAverage: ");
		result.append(temperatureAverage);
		result.append(", relativehumidityMinimum: ");
		result.append(relativehumidityMinimum);
		result.append(", relativehumidityAverage: ");
		result.append(relativehumidityAverage);
		result.append(", windspeedMinimum: ");
		result.append(windspeedMinimum);
		result.append(", windspeedMaximum: ");
		result.append(windspeedMaximum);
		result.append(", windspeedAverage: ");
		result.append(windspeedAverage);
		result.append(", winddirectionAverage: ");
		result.append(winddirectionAverage);
		result.append(", distanceAscent: ");
		result.append(distanceAscent);
		result.append(", distanceDescent: ");
		result.append(distanceDescent);
		result.append(", percentAscent: ");
		result.append(percentAscent);
		result.append(", percentDescent: ");
		result.append(percentDescent);
		result.append(", percentFlat: ");
		result.append(percentFlat);
		result.append(", anaerobicPercentage: ");
		result.append(anaerobicPercentage);
		result.append(", aerobicPercentage: ");
		result.append(aerobicPercentage);
		result.append(", otherPercentage: ");
		result.append(otherPercentage);
		result.append(", vo2maxPercentage: ");
		result.append(vo2maxPercentage);
		result.append(", recoveryPercentage: ");
		result.append(recoveryPercentage);
		result.append(')');
		return result.toString();
	}
	
	public Date getEarliestTimestamp()
	{
		Date 				result 		= new Date(0);
		DataLog				current;
		Iterator<DataLog> 	it	 		= this.getDatalogs().iterator();
		
		// Initialize earliest start time and move to next dataLog 
		if (it.hasNext())
		{
			current = it.next();
			result = current.getStartTime();
		}
		
		// While there are more dataLogs check for an earlier start time 
		while (it.hasNext())
		{
			current = it.next();
			
			//if (current.getStartTime().getTime() < result.getTime())
			//	result = current.getStartTime();
			
		}
		
		return(result);
	}
	
	
	public Date getLatestTimestamp()
	{
		//TODO: Fix this 
		Date result = new Date(0);
		Iterator<DataLog>	it	= this.getDatalogs().iterator();
		DataLog   			current;
		
		
		while (it.hasNext())
		{
			current = it.next();

			if (current.getStartTime().getTime() 
					> result.getTime())
				result = current.getEndTime();
			
		}
		
		return(result);
	}

} //ExerciseImpl
